# encoding:utf-8
import uuid
from Crypto.Cipher import DES
from Crypto.Util.Padding import pad, unpad

'''
对称加密算法：
对称加密采用了对称密码编码技术，它的特点是文件加密和解密使用相同的密钥
发送方和接收方需要持有同一把密钥，发送消息和接收消息均使用该密钥。
相对于非对称加密，对称加密具有更高的加解密速度，但双方都需要事先知道密钥，密钥在传输过程中可能会被窃取，因此安全性没有非对称加密高。
常见的对称加密算法：DES，AES，3DES等等
'''

def get_key(len=8):
    """
    获取指定位数的动态密钥
    """
    key = str(uuid.uuid4()).replace('-', '')[4:4+len].upper()
    return key.encode('utf-8')

class My_DES_ECB():
    '''
    入口参数有三个：Key、Data、Mode
    Key为7个字节共56位，是DES算法的工作密钥
    Data为8个字节64位，是要被加密或被解密的数据
    Mode为DES的工作方式,有两种:加密或解密
    '''
    def __init__(self, key):
        # 密钥必须为8位
        self.key = key
        self.mode = DES.MODE_ECB
        self.cryptor = DES.new(self.key, self.mode)

    def encrypt(self, plain_text):
        encrypted_text = self.cryptor.encrypt(pad(plain_text.encode('utf-8'), DES.block_size))
        return encrypted_text

    def decrypt(self, encrypted_text):
        plain_text = self.cryptor.decrypt(encrypted_text)
        plain_text = unpad(plain_text, DES.block_size).decode()
        return plain_text


if __name__ == '__main__':
    key = get_key()
    pc = My_DES_ECB(key)  # 初始化密钥
    e = pc.encrypt("0123456789ABCDEF")
    d = pc.decrypt(e)
    print(e, d)